The term “error correcting code (ECC)” is used herein to refer to a process of adding redundant data, or parity data, to a message, such that it can be recovered by a receiver even when a number of errors were introduced, either during the process of transmission, or storage. In general, the ECC can correct the errors up to the capability of the code being used. Error-correcting codes are frequently used in communications, as well as for reliable storage in media such as CDs, DVDs, hard disks, and random access memories (RAMs), flash memories, solid state disk (SSD), and the like.
In NAND flash storage enterprise applications, high read throughput is a key requirement. Read latency can be reduced significantly if the ECC decoder is able to decode the data using a single read from the NAND media (hard decoding). This motivated the ECC researchers to improve performance for the hard decoding. With recent research findings for product codes, it has been confirmed that this class of codes provides better decoding performance compared to Bose-Chaudhuri-Hocquenghem (BCH) and low density parity check (LDPC) codes with a low complexity encoder/decoder when a single NAND read operation is performed.
A class of improved product codes have been proposed, as described in U.S. patent application Ser. No. 15/158,425 entitled “Generalized Product Codes For NAND Flash Storage,” filed May 18, 2016, which is commonly assigned and expressly incorporated by reference herein in its entirety. This class of improved product codes, referred to as generalized product codes (GPC), has been shown to provide improved performance, for example, lower error floor.